package NO1_Array;

/**
 * 2025-08-21
 * 力扣 - 80. 删除有序数组中的重复项 II
 * <p>
 * 给你一个有序数组 nums ，请你 原地 删除重复出现的元素，使得出现次数超过两次的元素只出现两次 ，返回删除后数组的新长度。
 * 不要使用额外的数组空间，你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
 */
public class RemoveDuplicates2Main {

    public static void main(String[] args) {
        int[] nums = {1, 1, 1, 2, 2, 3};
        System.out.println(removeDuplicates(nums));
    }

    public static int removeDuplicates(int[] nums) {
        if (nums.length <= 2) {
            return nums.length;
        }

        int slow = 2; // 从第3个位置开始检查
        for (int fast = 2; fast < nums.length; fast++) {
            // 如果当前数字不等于慢指针前2个位置的数字
            if (nums[fast] != nums[slow - 2]) {
                nums[slow] = nums[fast];
                slow++;
            }
        }

        return slow;
    }

    public int removeDuplicates1(int[] nums) {
        if (nums == null) return 0;
        if (nums.length <= 2) return nums.length;

        int count = 1; // 当前数字的计数
        int slow = 1;  // 慢指针

        for (int fast = 1; fast < nums.length; fast++) {
            if (nums[fast] == nums[fast - 1]) {
                count++;
            } else {
                count = 1; // 遇到新数字，重置计数
            }

            if (count <= 2) {
                nums[slow] = nums[fast];
                slow++;
            }
        }

        return slow;
    }
}
